// 知识点：partition()返回的是最后一个使谓词为true的元素的后一个位置的迭代器
// find_if()返回的是第一个使谓词返回非0值的元素，若不存在这样的元素，则返回尾迭代器

// 主要关注于两个算法的返回值即可
#include <algorithm>
#include <iostream>
#include <numeric>
#include <string>
#include <vector>

using namespace std;

void elimDups(vector<string> &s) {
  sort(s.begin(), s.end());                                  // sort排序
  vector<string>::iterator str = unique(s.begin(), s.end()); // unique排序
  s.erase(str, s.end());                                     // erase()操作
}
void biggis(vector<string> &s, vector<string>::size_type sz) {
  elimDups(s); //字典排序、删除重复
  stable_sort(s.begin(), s.end(), [](const string &a, const string &b) {
    return a.size() < b.size();
  }); //按长度排序
  auto it1 = partition(s.begin(), s.end(),
                       [sz](const string &s) { return s.size() <= sz; });
  for (; it1 != s.end(); ++it1) {
    cout << *it1 << " ";
  }
}
int main(int argc, char **argv) {
  string a[10] = {"diuwudh", "udh",  "diudh",       "wudh", "diuwu",
                  "h",       "diuw", "diuwudhg257", "h",    "d"};
  vector<string> vec1(a, a + 10); //利用数组初始化vector
  biggis(vec1, 4);                //找出长度大于4的字符串

  return 0;
}